package com.zjl.redis.第05章_redis的多环境部署;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisSentinelPool;

import java.util.HashSet;
import java.util.Set;

/**
 *
 * ● 通过日志 --logfile  配置的路径
 *   可以看出，哨兵虽然只配置了一个主机ip，
 *   但是，他通过主机，可以获取到连接此主机的所有从机，和所有监控此主机的哨兵
 * ● 运行后在 哨兵的配置文件中 sentinel.conf 可以发现，
 *      他将此主机的所有从机 和 其他哨兵 的配置信息，都写入了此文件中
 * ● 如果主机挂了。在重连回去，就变成了从机，这时看 原主机(即现从机)就会多了点配置文件，
 *          replicaof 新主机ip 新主机端口
 *          和一些别的
 *   新的主机，会将之前的一些配置，如 replicaof 给涂掉
 *
 *
 *  如果报错 master_link_status: down
 *  是因为，主机之后可能出现变从机的可能，需要配置连接主机的密码，即配置
 *      masterauth 密码
 *   最好，redis的密码都是一致的，否则不好配置
 *
 */
public class B4_哨兵模式的通信 {
    private static JedisSentinelPool jedisSentinelPool = null;
    public static Jedis getJedisFromSentinel(){
        if(jedisSentinelPool == null){
            Set<String> sentinelSet = new HashSet<>();
            sentinelSet.add("127.0.0.1:26379");//哨兵
            sentinelSet.add("127.0.0.1:26379");//哨兵
            JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
            jedisPoolConfig.setMaxTotal(10);//最大可用连接数
            jedisPoolConfig.setMaxIdle(5);//最大闲置连接数
            jedisPoolConfig.setMinIdle(5);//最小闲置连接数
            jedisPoolConfig.setBlockWhenExhausted(true);//连接耗尽是否等待
            jedisPoolConfig.setMaxWaitMillis(2000);//等待时间 毫秒
            jedisPoolConfig.setTestOnBorrow(true);//取连接时进行ping pong测试

            jedisSentinelPool = new JedisSentinelPool("mymaster"
                    ,sentinelSet,jedisPoolConfig);
        }
        return jedisSentinelPool.getResource();
    }
}
